package com.cfjjc.gz.common.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

import com.cfjjc.gz.common.exception.OTSException;

/**
 * @author lx
 * ftp 实用类
 *
 */
public class FTPUtil {
	
	 /**
     * logger对象
     */
    private static final Logger logger = Logger.getLogger(FTPUtil.class);
    
	/**
	 * Description: 向FTP服务器上传文件
	 * 
	 * @param hostIP
	 *            FTP服务器IP
	 * @param port
	 *            FTP服务器端口
	 * @param username
	 *            FTP登录账号
	 * @param password
	 *            FTP登录密码
	 * @param path
	 *            FTP服务器保存目录
	 * @param filename
	 *            上传到FTP服务器上的文件名
	 * @param input
	 *            输入流
	 * @return 成功返回true，否则返回false
	 */
	public static boolean uploadFile(String hostIP, int port, String username, String password, String path, String filename, InputStream input) throws OTSException {
		// 初始表示上传失败
		boolean success = false;
		// 创建FTPClient对象
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			// 连接FTP服务器
			// 如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
			ftp.connect(hostIP, port);
			ftp.login(username, password);	// 登录ftp
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE);	// 设置以二进制方式传输
			// 看返回的值是不是230，如果是，表示登陆成功
			reply = ftp.getReplyCode();
			// 以2开头的返回值就会为真
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				logger.error("无法连接到ftp服务器，请检查连接配置。");
				throw new OTSException("无法连接到ftp服务器，请检查连接配置。");
			}
			// 转到指定上传目录
			ftp.changeWorkingDirectory(path);
			// 将上传文件存储到指定目录
			ftp.storeFile(filename, input);
			// 关闭输入流
			input.close();
			// 退出ftp
			ftp.logout();
			// 表示上传成功
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
			throw new OTSException("无法连接到ftp服务器，请检查连接配置。");
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;
	}

	public static void main(String[] args) throws Exception {
		
		InputStream in = ConfigUtil.class.getClassLoader().getResourceAsStream("license");
		uploadFile("192.168.19.30",
				10007,
				"root",
				"abcd1234",
				"/home/nscg/etc/",
				"license",
				in);
	}
}